import { Provider } from './Provider';

/**
 * - 作者: DoooReyn
 * - 日期: 2023.10.29
 * - 名称: Logger
 * - 描述: 日志管理器
 */
export class Logger {
    /** 日志提供商记录池 */
    private static Container: Record<string, Provider> | undefined;

    /** 日志开关（全局） */
    private static Enabled: boolean = true;

    /** 日志开关状态（全局） */
    public static get enabled() {
        return this.Enabled;
    }

    /** 设置日志开关状态（全局） */
    public static set enabled(on: boolean) {
        this.turnAllTo(on);
    }

    /**
     * 获取日志提供商
     * @param catalog 日志类别
     */
    public static getLogger(catalog: string) {
        this.Container = this.Container || {};
        return (this.Container[catalog] = this.Container[catalog] || new Provider(catalog, this.Enabled));
    }

    /**
     * 移除日志提供商
     * @param catalog 日志类别
     */
    public static removeLogger(catalog: string) {
        this.Container && delete this.Container![catalog];
    }

    /**
     * 是否已有日志提供商
     * @param catalog 日志类别
     * @returns
     */
    public static hasLogger(catalog: string) {
        return this.Container && this.Container[catalog] !== undefined;
    }

    /** 清除所有日志提供商 */
    public static clearLogger() {
        if (this.Container) {
            for (const catalog in this.Container) {
                delete this.Container[catalog];
            }
            delete this.Container;
        }
    }

    /**
     * 全部打开/关闭
     * @param enabled 打开/关闭
     */
    public static turnAllTo(enabled: boolean) {
        if (this.Container) {
            for (const catalog in this.Container) {
                this.Container[catalog].enabled = enabled;
            }
        }
    }
}
